package cn.mujiankeji.mbrowser.界面.标签页.页面管理

import android.inputmethodservice.Keyboard.Row
import android.widget.Space
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Card
import androidx.compose.material3.CardColors
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import cn.mujiankeji.mbrowser.app.应用路由
import cn.mujiankeji.mbrowser.工具.安卓接口
import cn.mujiankeji.mbrowser.数据.数据库.AppDatabase
import cn.mujiankeji.mbrowser.数据.数据库.DBHomeTab
import cn.mujiankeji.mbrowser.数据.模型类.基本项目
import cn.mujiankeji.mbrowser.界面.图标.MyIconPack
import cn.mujiankeji.mbrowser.界面.图标.myiconpack.Html
import cn.mujiankeji.mbrowser.界面.小窗页.文本编辑窗口状态
import cn.mujiankeji.mbrowser.界面.标签页.统一标签页布局
import io.github.vinceglb.filekit.FileKit
import io.github.vinceglb.filekit.PlatformFile
import io.github.vinceglb.filekit.dialogs.FileKitMode
import io.github.vinceglb.filekit.dialogs.openDirectoryPicker
import io.github.vinceglb.filekit.path
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
import org.koin.compose.koinInject
import 数据.枚举类.错误类型
import 界面.弹窗.下拉菜单
import 界面.弹窗.下拉菜单项目
import java.io.File
import java.nio.file.Path


@Composable
fun 页面管理标签实现(state : 页面管理标签状态) {

    state.coroutine = rememberCoroutineScope()
    LaunchedEffect(Unit) {
        state.加载()
    }
    DisposableEffect(Unit) {
        onDispose {
            state.coroutine?.cancel()
            state.coroutine = null
        }
    }

    统一标签页布局(
        title = {state.标题.collectAsState().value?:""},
        action = {})
    {
        LazyColumn(Modifier.fillMaxSize()) {
            items(state.历史页面列表) { item ->
                离线页面项目(state, item)
            }
        }
    }
}

@Composable
private fun 离线页面项目(state : 页面管理标签状态, item : 基本项目){
    val context = LocalContext.current
    val scope = rememberCoroutineScope()
    val db = koinInject<AppDatabase>()
    var showMenu by remember { mutableStateOf(false) }
    
    Card(modifier = Modifier.fillMaxWidth()
        .padding(horizontal = 10.dp, vertical = 5.dp)
        .combinedClickable(
            onClick = {state.点击项目(item)},
            onLongClick = {showMenu = true}
        ),
        shape = MaterialTheme.shapes.medium,
        colors = CardDefaults.cardColors().copy(containerColor = MaterialTheme.colorScheme.surface)
    ) {
        Row(Modifier.fillMaxWidth()
            .padding(15.dp),
            verticalAlignment = Alignment.CenterVertically)
        {
            Icon(MyIconPack.Html, "",tint = MaterialTheme.colorScheme.onSurface,
                modifier = Modifier.size(22.dp))

            Spacer(Modifier.width(13.dp))

            Column(Modifier.fillMaxWidth()){
                Text(item.标题, style = MaterialTheme.typography.titleSmall,
                    color = MaterialTheme.colorScheme.onSurface)

                Spacer(Modifier.height(6.dp))

                Text(item.副标题?:"", style = MaterialTheme.typography.labelMedium,
                    color = MaterialTheme.colorScheme.secondary)
            }
        }

        下拉菜单(showMenu, {showMenu = false}){
            下拉菜单项目("新窗口打开"){
                应用路由.加载(item.地址, 新窗口打开 = true)
                showMenu = false
            }

            下拉菜单项目("分享页面"){
                安卓接口.分享(context, null, item.地址)
                showMenu = false
            }

            下拉菜单项目("复制到存储卡"){
                scope.launch {
                    try {
                        val 源文件 = File(item.地址.removePrefix("file://"))
                        if (源文件.exists()) {
                            val 目标目录 = FileKit.openDirectoryPicker()
                            if (目标目录 != null) {
                                val 目标文件 = PlatformFile(目标目录.path + "/" + 源文件.name)
                                源文件.copyTo(File(目标文件.path), overwrite = true)
                            }
                        }
                    } catch (e: Exception) {
                        // 错误处理
                    }
                }
                showMenu = false
            }

            下拉菜单项目("添加到首页"){
                scope.launch {
                    try {
                        // 获取最大排序值
                        val 最大排序 = db.主页标签().获取最大排序() ?: 0
                        
                        // 创建新的主页标签
                        val 新标签 = DBHomeTab(
                            标签名称 = item.标题,
                            链接URL = item.地址,
                            排序位置 = 最大排序 + 1,
                            是否为组 = false,
                            组ID = 0,
                            创建时间 = System.currentTimeMillis()
                        )
                        
                        // 添加到数据库
                        db.主页标签().添加标签(新标签)
                    } catch (e: Exception) {
                        // 错误处理
                    }
                }
                showMenu = false
            }

            下拉菜单项目("重命名"){
                val 文本编辑状态 = 文本编辑窗口状态(
                    默认值 = item.标题,
                    提示值 = { "输入新的页面名称" },
                    检测 = { 新名称 ->
                        if (新名称.isBlank()) return@文本编辑窗口状态 错误类型.名称为空
                        if (新名称.contains("/") || 新名称.contains("\\")) return@文本编辑窗口状态 错误类型.名称不规范
                        
                        // 检查文件名是否存在
                        val 原文件 = File(item.地址.removePrefix("file://"))
                        val 新文件 = File(原文件.parent, "$新名称.html")
                        if (新文件.exists() && 新文件.absolutePath != 原文件.absolutePath) {
                            return@文本编辑窗口状态 错误类型.名称重复
                        }
                        
                        null
                    },
                    响应 = { 新名称 ->
                        if (新名称 != null) {
                            scope.launch {
                                state.重命名页面(item.地址, 新名称)
                            }
                        }
                    }
                )
                文本编辑状态.显示()
                showMenu = false
            }

            下拉菜单项目("删除"){
                scope.launch {
                    state.删除页面(item.地址)
                }
                showMenu = false
            }
        }
    }
}